import argparse
from argparse import RawTextHelpFormatter
import pytest
from loguru import logger
from utils.basic import get_path, delete_file
from utils.py_object import cache
from utils.basic import modify_report_name
from constants import Report,Logs
from setting import DEBUG_CASE


def add_case_parser(case_parser):
    case_parser.add_argument('-p', '--path', dest='path', default='test_web',
                             help='添加运行的测试用例路径，默认为接口测试路径:test_web')
    case_parser.add_argument('-m', '--markers', dest='markers', default='all',
                             help='测试用例标记，用于筛选测试，默认为all ,也可以添加p0,p1,flow等')


if __name__ == '__main__':
    file_name = get_path('logs',Logs.LOG_FILE)
    logger.add(file_name,rotation=Logs.ROTATION,level=Logs.LOG_LEVEL)

    # 删除测试报告的文件
    delete_file(get_path('reports'))

    # 允许参数初始化列表
    py_args = list([])
    py_args.append('--report={}'.format(Report.REPORT_FILE))
    py_args.append('--title={}'.format(Report.REPORT_TITLE))
    py_args.append('--tester={}'.format(Report.TESTER))
    py_args.append('--desc={}'.format(Report.DESC))
    py_args.append('--template={}'.format(Report.TEMPLEATE))

    # 添加调式用例
    debug_case = DEBUG_CASE if DEBUG_CASE else ''
    if debug_case:
        cache.set('debug_case', debug_case)

    parser = argparse.ArgumentParser(formatter_class=RawTextHelpFormatter)
    add_case_parser(parser)
    args = parser.parse_args()

    # 从外部添加参数
    py_args.append('cases/{}'.format(args.path))
    py_args.append('--case_markers={}'.format(args.markers))
    pytest.main(py_args)

    # 修改文件名字
    modify_report_name()



